/**
 * fileStream.js - 将 from.txt 内容转换为大写后写入 to.txt
 * 要求：
 * 1) 对文件 from.txt 创建可读流
 * 2) 经由 Transform 流把数据字符转为大写
 * 3) 使用管道把转换后的字符写入到 to.txt 中
 */

const fs = require('fs');
const path = require('path');
const { Transform, pipeline } = require('stream');

// 文件路径（与本文件同目录）
const fromPath = path.join(__dirname, 'from.txt');
const toPath = path.join(__dirname, 'to.txt');

// 自定义 Transform，把输入统一转为大写
class UppercaseTransform extends Transform {
  constructor() {
    super();
  }

  _transform(chunk, encoding, callback) {
    try {
      const input = typeof chunk === 'string' ? chunk : chunk.toString('utf8');
      this.push(input.toUpperCase());
      callback();
    } catch (err) {
      callback(err);
    }
  }
}

// 创建可读流、转换流、可写流
const readStream = fs.createReadStream(fromPath, { encoding: 'utf8' });
const upper = new UppercaseTransform();
const writeStream = fs.createWriteStream(toPath, { encoding: 'utf8' });

// 使用管道把数据从读流经过转换流写入目标文件
pipeline(readStream, upper, writeStream, (err) => {
  if (err) {
    console.error('流水线出错:', err.message);
  } else {
    console.log('转换完成: 已将 from.txt 内容转为大写写入 to.txt');
  }
});


